libdbz/dbz.c
/* [<][>][^][v][top][bottom][index][help] */
FUNCTIONS
This source file includes following functions.
- BIAS
- UNBIAS
- HASTAG
- TAG
- NOTAG
- CANTAG
- MKTAG
- MAPIN
- MAPOUT
- DEBUG
- DEBUG
- CloseOnExec
- dbzfresh
- dbzsize
- isprime
- dbzagain
- dbminit
- enstring
- dbmclose
- dbzsync
- dbzcancel
- dbzfetch
- fetch
- latebase
- dbzstore
- store
- dbzincore
- dbzwritethrough
- dbztagmask
- getconf
- getno
- putconf
- getcore
- putcore
- start
- search
- okayvalue
- set
- mybytemap
- bytemap
- crcinit
- hash
- TOLOW
- CISTREQN
- mapprime
- casencmp
- mapcase
- cipoint
- dbzdebug
/* $Id: dbz.c,v 1.1.1.1 1998/07/29 15:14:28 proff Exp $
* $Copyright$
*/
#include "standard.h"
#include "dbz.h"
/*
dbz.c V3.2
Copyright 1988 Jon Zeeff (zeeff@b-tech.ann-arbor.mi.us)
You can use this code in any manner, as long as you leave my name on it
and don't hold me responsible for any problems with it.
Hacked on by gdb@ninja.UUCP (David Butler); Sun Jun 5 00:27:08 CDT 1988
Various improvments + INCORE by moraes@ai.toronto.edu (Mark Moraes)
Major reworking by Henry Spencer as part of the C News project.
Minor lint and CodeCenter (Saber) fluff removal by Rich $alz (March, 1991).
Non-portable CloseOnExec() calls added by Rich $alz (September, 1991).
Added "writethrough" and tagmask calculation code from
<rob@violet.berkeley.edu> and <leres@ee.lbl.gov> by Rich $alz (December, 1992).
Merged in MMAP code by David Robinson, formerly <david@elroy.jpl.nasa.gov>
now <david.robinson@sun.com> (January, 1993),
nntpcache optimisations (mainly invalid lookups) by Julian Assange <proff@iq.org> (March, 1996)
nntpcache macro system by Julian Assange <proff@iq.org> (December, 1997)
These routines replace dbm as used by the usenet news software
(it's not a full dbm replacement by any means). It's fast and
simple. It contains no AT&T code.
In general, dbz's files are 1/20 the size of dbm's. Lookup performance
is somewhat better, while file creation is spectacularly faster, especially
if the incore facility is used.
*/
/*
* #ifdef index. "LIA" = "leave it alone unless you know what you're doing".
*
* INDEX_SIZE backward compatibility with old dbz; avoid using this
* NMEMORY number of days of memory for use in sizing new table (LIA)
* INCORE backward compatibility with old dbz; use dbzincore() instead
* DBZDEBUG enable debugging
* DEFSIZE default table size (not as critical as in old dbz)
* OLDBNEWS default case mapping as in old B News; set NOBUFFER
* BNEWS default case mapping as in current B News; set NOBUFFER
* DEFCASE default case-map algorithm selector
* NOTAGS fseek offsets are strange, do not do tagging (see below)
* NPAGBUF size of .pag buffer, in longs (LIA)
* SHISTBUF size of ASCII-file buffer, in bytes (LIA)
* MAXRUN length of run which shifts to next table (see below) (LIA)
* OVERFLOW long-int arithmetic overflow must be avoided, will trap
* NOBUFFER do not buffer hash-table i/o, B News locking is defective
* MMAP Use SunOS style mmap() for efficient incore
*/
/* SUPPRESS 530 *//* Empty body for statement */
/* SUPPRESS 701 on free *//* Conflicting declaration */
#ifdef OVERFLOW
#include <limits.h>
#endif
static int dbzversion = 3; /* for validating .dir file format */
/*
* The dbz database exploits the fact that when news stores a <key,value>
* tuple, the `value' part is a seek offset into a text file, pointing to
* a copy of the `key' part. This avoids the need to store a copy of
* the key in the dbz files. However, the text file *must* exist and be
* consistent with the dbz files, or things will fail.
*
* The basic format of the database is a simple hash table containing the
* values. A value is stored by indexing into the table using a hash value
* computed from the key; collisions are resolved by linear probing (just
* search forward for an empty slot, wrapping around to the beginning of
* the table if necessary). Linear probing is a performance disaster when
* the table starts to get full, so a complication is introduced. The
* database is actually one *or more* tables, stored sequentially in the
* .pag file, and the length of linear-probe sequences is limited. The
* search (for an existing item or an empty slot) always starts in the
* first table, and whenever MAXRUN probes have been done in table N,
* probing continues in table N+1. This behaves reasonably well even in
* cases of massive overflow. There are some other small complications
* added, see comments below.
*
* The table size is fixed for any particular database, but is determined
* dynamically when a database is rebuilt. The strategy is to try to pick
* the size so the first table will be no more than 2/3 full, that being
* slightly before the point where performance starts to degrade. (It is
* desirable to be a bit conservative because the overflow strategy tends
* to produce files with holes in them, which is a nuisance.)
*/
/*
* The following is for backward compatibility.
*/
#ifdef INDEX_SIZE
#define DEFSIZE INDEX_SIZE
#endif
/*
* ANSI C says an offset into a file is a long, not an off_t, for some
* reason. This actually does simplify life a bit, but it's still nice
* to have a distinctive name for it. Beware, this is just for readability,
* don't try to change this.
*/
#define of_t long
#define SOF (sizeof(of_t))
/*
* We assume that unused areas of a binary file are zeros, and that the
* bit pattern of `(of_t)0' is all zeros. The alternative is rather
* painful file initialization. Note that okayvalue(), if OVERFLOW is
* defined, knows what value of an offset would cause overflow.
*/
#define VACANT ((of_t)0)
#define BIAS(o) ((o)+1) /* make any valid of_t non-VACANT */
/* [<][>][^][v][top][bottom][index][help] */
#define UNBIAS(o) ((o)-1) /* reverse BIAS() effect */
/* [<][>][^][v][top][bottom][index][help] */
/*
* In a Unix implementation, or indeed any in which an of_t is a byte
* count, there are a bunch of high bits free in an of_t. There is a
* use for them. Checking a possible hit by looking it up in the base
* file is relatively expensive, and the cost can be dramatically reduced
* by using some of those high bits to tag the value with a few more bits
* of the key's hash. This detects most false hits without the overhead of
* seek+read+strcmp. We use the top bit to indicate whether the value is
* tagged or not, and don't tag a value which is using the tag bits itself.
* We're in trouble if the of_t representation wants to use the top bit.
* The actual bitmasks and offset come from the configuration stuff,
* which permits fiddling with them as necessary, and also suppressing
* them completely (by defining the masks to 0). We build pre-shifted
* versions of the masks for efficiency.
*/
static of_t tagbits; /* pre-shifted tag mask */
static of_t taghere; /* pre-shifted tag-enable bit */
static of_t tagboth; /* tagbits|taghere */
#define HASTAG(o) ((o)&taghere)
/* [<][>][^][v][top][bottom][index][help] */
#define TAG(o) ((o)&tagbits)
/* [<][>][^][v][top][bottom][index][help] */
#define NOTAG(o) ((o)&~tagboth)
/* [<][>][^][v][top][bottom][index][help] */
#define CANTAG(o) (((o)&tagboth) == 0)
/* [<][>][^][v][top][bottom][index][help] */
#define MKTAG(v) (((v)<<conf.tagshift)&tagbits)
/* [<][>][^][v][top][bottom][index][help] */
/*
* A new, from-scratch database, not built as a rebuild of an old one,
* needs to know table size, casemap algorithm, and tagging. Normally
* the user supplies this info, but there have to be defaults.
*/
#ifndef DEFSIZE
#define DEFSIZE 120011 /* 300007 might be better */
#endif
#ifdef OLDBNEWS
#define DEFCASE '0' /* B2.10 -- no mapping */
#define NOBUFFER /* B News locking is defective */
#endif
#ifdef BNEWS
#define DEFCASE '=' /* B2.11 -- all mapped */
#define NOBUFFER /* B News locking is defective */
#endif
#ifndef DEFCASE /* C News compatibility is the default */
#define DEFCASE 'C' /* C News -- RFC822 mapping */
#endif
#ifndef NOTAGS
#define TAGENB 0x80 /* tag enable is top bit, tag is next 7 */
#define TAGMASK 0x7f
#define TAGSHIFT 24
#else
#define TAGENB 0 /* no tags */
#define TAGMASK 0
#define TAGSHIFT 0
#endif
/*
* We read configuration info from the .dir file into this structure,
* so we can avoid wired-in assumptions for an existing database.
*
* Among the info is a record of recent peak usages, so that a new table
* size can be chosen intelligently when rebuilding. 10 is a good
* number of usages to keep, since news displays marked fluctuations
* in volume on a 7-day cycle.
*/
struct dbzconfig
{
int olddbz; /* .dir file empty but .pag not? */
of_t tsize; /* table size */
#ifndef NMEMORY
#define NMEMORY 10 /* # days of use info to remember */
#endif
#define NUSEDS (1+NMEMORY)
of_t used[NUSEDS]; /* entries used today, yesterday, ... */
int valuesize; /* size of table values, == SOF */
int bytemap[SOF]; /* byte-order map */
char casemap; /* case-mapping algorithm (see cipoint()) */
char fieldsep; /* field separator in base file, if any */
of_t tagenb; /* unshifted tag-enable bit */
of_t tagmask; /* unshifted tag mask */
int tagshift; /* shift count for tagmask and tagenb */
};
static struct dbzconfig conf;
static int getconf ();
static long getno ();
static int putconf ();
static void mybytemap ();
static of_t bytemap ();
/*
* Using mmap() is a more efficent way of keeping the .pag file incore. On
* average, it cuts the number of system calls and buffer copies in half.
* It also allows one copy to be shared among many processes without
* consuming any extra resources.
*/
#ifdef MMAP
#include <sys/mman.h>
#ifdef MAP_FILE
#define MAP__ARG (MAP_FILE | MAP_SHARED)
#else
#define MAP__ARG (MAP_SHARED)
#endif
#ifndef INCORE
#define INCORE
#endif
#endif
/*
* For a program that makes many, many references to the database, it
* is a large performance win to keep the table in core, if it will fit.
* Note that this does hurt robustness in the event of crashes, and
* dbmclose() *must* be called to flush the in-core database to disk.
* The code is prepared to deal with the possibility that there isn't
* enough memory. There *is* an assumption that a size_t is big enough
* to hold the size (in bytes) of one table, so dbminit() tries to figure
* out whether this is possible first.
*
* The preferred way to ask for an in-core table is to do dbzincore(1)
* before dbminit(). The default is not to do it, although -DINCORE
* overrides this for backward compatibility with old dbz.
*
* We keep only the first table in core. This greatly simplifies the
* code, and bounds memory demand. Furthermore, doing this is a large
* performance win even in the event of massive overflow.
*/
#ifdef INCORE
static int incore = 1;
#else
static int incore = 0;
#endif
/*
* Write to filesystem even if incore? This replaces a single multi-
* megabyte write when doing a dbzsync with a multi-byte write each
* time an article is added. On most systems, this will give an overall
* performance boost.
*/
static int writethrough = 0;
/*
* Stdio buffer for .pag reads. Buffering more than about 16 does not help
* significantly at the densities we try to maintain, and the much larger
* buffers that most stdios default to are much more expensive to fill.
* With small buffers, stdio is performance-competitive with raw read(),
* and it's much more portable.
*/
#ifndef NPAGBUF
#define NPAGBUF 16
#endif
#ifndef NOBUFFER
#ifdef _IOFBF
static of_t pagbuf[NPAGBUF]; /* only needed if !NOBUFFER && _IOFBF */
#endif
#endif
/*
* Stdio buffer for base-file reads. Message-IDs (all news ever needs to
* read) are essentially never longer than 64 bytes, and the typical stdio
* buffer is so much larger that it is much more expensive to fill.
*/
#ifndef SHISTBUF
#define SHISTBUF 128
#endif
#ifdef _IOFBF
static char basebuf[SHISTBUF]; /* only needed if _IOFBF exists */
#endif
/*
* Data structure for recording info about searches.
*/
struct searcher
{
of_t place; /* current location in file */
int tabno; /* which table we're in */
int run; /* how long we'll stay in this table */
#ifndef MAXRUN
#define MAXRUN 100
#endif
long hash; /* the key's hash code (for optimization) */
of_t tag; /* tag we are looking for */
int seen; /* have we examined current location? */
int aborted; /* has i/o error aborted search? */
};
static void start ();
#define FRESH ((struct searcher *)NULL)
static of_t search ();
#define NOTFOUND ((of_t)-1)
static int okayvalue ();
static int set ();
/*
* Arguably the searcher struct for a given routine ought to be local to
* it, but a fetch() is very often immediately followed by a store(), and
* in some circumstances it is a useful performance win to remember where
* the fetch() completed. So we use a global struct and remember whether
* it is current.
*/
static struct searcher srch;
static struct searcher *prevp; /* &srch or FRESH */
/* byte-ordering stuff */
static int mybmap[SOF]; /* my byte order (see mybytemap()) */
static int bytesame; /* is database order same as mine? */
#define MAPIN(o) ((bytesame) ? (o) : bytemap((o), conf.bytemap, mybmap))
/* [<][>][^][v][top][bottom][index][help] */
#define MAPOUT(o) ((bytesame) ? (o) : bytemap((o), mybmap, conf.bytemap))
/* [<][>][^][v][top][bottom][index][help] */
/*
* The double parentheses needed to make this work are ugly, but the
* alternative (under most compilers) is to pack around 2K of unused
* strings -- there's just no way to get rid of them.
*/
#ifdef DBZDEBUG
static int debug; /* controlled by dbzdebug() */
#define DEBUG(args) if (debug) { (void) printf args ; } else
/* [<][>][^][v][top][bottom][index][help] */
#else
#define DEBUG(args) ;
/* [<][>][^][v][top][bottom][index][help] */
#endif
/* misc. forwards */
static long hash ();
static void crcinit ();
static char *cipoint ();
static char *mapcase ();
static int isprime ();
static FILE *latebase ();
/* file-naming stuff */
static char dir[] = ".dir";
static char pag[] = ".pag";
static char *enstring ();
/* central data structures */
static FILE *basef; /* descriptor for base file */
static char *basefname; /* name for not-yet-opened base file */
static FILE *dirf; /* descriptor for .dir file */
static int dirronly; /* dirf open read-only? */
static FILE *pagf = NULL; /* descriptor for .pag file */
static of_t pagpos; /* posn in pagf; only search may set != -1 */
static int pagronly; /* pagf open read-only? */
static of_t *corepag; /* incore version of .pag file, if any */
static FILE *bufpagf; /* well-buffered pagf, for incore rewrite */
static of_t *getcore ();
#ifndef MMAP
static int putcore ();
#endif
static int written; /* has a store() been done? */
/*
* stub, not used
*/
void CloseOnExec (int fd, int sw)
/* [<][>][^][v][top][bottom][index][help] */
{
return;
}
/*
- dbzfresh - set up a new database, no historical info
*/
/* 0 success, -1 failure */
EXPORT int dbzfresh (char *name, long size, int fs, int cmap, of_t tagmask)
/* [<][>][^][v][top][bottom][index][help] */
{
register char *fn;
struct dbzconfig c;
register of_t m;
register FILE *f;
if (pagf != NULL)
{
DEBUG (("dbzfresh: database already open\n"));
return (-1);
}
if (size != 0 && size < 2)
{
DEBUG (("dbzfresh: preposterous size (%ld)\n", size));
return (-1);
}
/* get default configuration */
if (getconf ((FILE *) NULL, (FILE *) NULL, &c) < 0)
return (-1); /* "can't happen" */
/* and mess with it as specified */
if (size != 0)
c.tsize = size;
c.fieldsep = fs;
switch (cmap)
{
case 0:
case '0':
case 'B': /* 2.10 compat */
c.casemap = '0'; /* '\0' nicer, but '0' printable! */
break;
case '=':
case 'b': /* 2.11 compat */
c.casemap = '=';
break;
case 'C':
c.casemap = 'C';
break;
case '?':
c.casemap = DEFCASE;
break;
default:
DEBUG (("dbzfresh case map `%c' unknown\n", cmap));
return (-1);
}
switch ((int) tagmask)
{
case 0: /* default */
break;
case 1: /* no tags */
c.tagshift = 0;
c.tagmask = 0;
c.tagenb = 0;
break;
default:
m = tagmask;
c.tagshift = 0;
while (!(m & 01))
{
m >>= 1;
c.tagshift++;
}
c.tagmask = m;
c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;
break;
}
/* write it out */
fn = enstring (name, di c.tagenb = (m << 1) & ~m;